/**
 * API配置常量
 * @description 集中管理API相关的配置信息
 */

// 环境配置
export const ENV = {
    /** 开发环境 */
    DEV: 'development',
    /** 生产环境 */
    PROD: 'production',
    /** 测试环境 */
    TEST: 'test'
} as const

// API基础配置
export const API_CONFIG = {
    /** API基础URL */
    BASE_URL: import.meta.env.VITE_API_BASE_URL || 'http://127.0.0.1',
    /** 管理后台API端口 (blog_admin模块) */
    ADMIN_PORT: import.meta.env.VITE_API_ADMIN_PORT || '5021',
    /** 客户端API端口 (blog_client模块) */
    CLIENT_PORT: import.meta.env.VITE_API_CLIENT_PORT || '5031',
    /** 认证API端口 (blog_auth模块) */
    AUTH_PORT: import.meta.env.VITE_API_AUTH_PORT || '5001',
    /** API版本 */
    VERSION: import.meta.env.VITE_API_VERSION || 'v1',
    /** 请求超时时间（毫秒） */
    TIMEOUT: 10000,
    /** 是否启用HTTPS */
    USE_HTTPS: import.meta.env.VITE_API_USE_HTTPS === 'true' || false
} as const

// API模块类型
export enum ApiModule {
    ADMIN = 'admin',
    CLIENT = 'client',
    AUTH = 'auth'
}

// API路径配置
export const API_PATHS = {
    // ========== 管理后台模块 (blog_admin: 端口5021) ==========
    ADMIN: {
        // 文章管理
        POST: {
            /** 分页查询文章 */
            QUERY_ALL: '/admin/post/queryAll',
            /** 获取文章详情 */
            QUERY_BY_ID: (id: number) => `/admin/post/query/${id}`,
            /** 新增文章 */
            ADD: '/admin/post/add',
            /** 更新文章 */
            UPDATE: '/admin/post/update',
            /** 删除文章 */
            DELETE: (id: number) => `/admin/post/delete/${id}`
        },
        // 分类管理
        CATEGORY: {
            /** 分页查询所有分类 */
            QUERY_ALL: '/admin/category/queryAllCategory',
            /** 获取顶级分类 */
            QUERY_PRIMARY: '/admin/category/queryPrimaryCategory',
            /** 获取指定分类的下级分类 */
            QUERY_BY_PRIMARY: '/admin/category/queryCategoryByPrimary',
            /** 新增分类 */
            ADD: '/admin/category/add',
            /** 更新分类 */
            UPDATE: '/admin/category/update',
            /** 删除分类 */
            DELETE: (id: number) => `/admin/category/delete/${id}`,
            /** 批量删除分类 */
            BATCH_DELETE: '/admin/category/batchDelete'
        },
        // 标签管理
        TAG: {
            /** 分页查询标签 */
            QUERY_ALL: '/admin/tag/queryAll',
            /** 新增标签 */
            ADD: '/admin/tag/add',
            /** 更新标签 */
            UPDATE: '/admin/tag/update',
            /** 删除标签 */
            DELETE: (id: number) => `/admin/tag/delete/${id}`
        },
        // 评论管理
        COMMENT: {
            /** 分页查询评论 */
            QUERY_ALL: '/admin/comment/queryAll',
            /** 新增评论 */
            ADD: '/admin/comment/add',
            /** 更新评论 */
            UPDATE: '/admin/comment/update',
            /** 删除评论 */
            DELETE: (id: number) => `/admin/comment/delete/${id}`
        },
        // 友链管理
        FRIEND_LINK: {
            /** 分页查询友链 */
            QUERY_ALL: '/admin/friendLink/queryAll',
            /** 获取友链面板数据 */
            QUERY_DASHBOARD: '/admin/friendLink/queryLinkDashboard',
            /** 新增友链 */
            ADD: '/admin/friendLink/add',
            /** 更新友链 */
            UPDATE: '/admin/friendLink/update',
            /** 删除友链 */
            DELETE: (id: number) => `/admin/friendLink/delete/${id}`
        },
        // 缓存管理
        CACHE: {
            /** 获取缓存统计 */
            METRICS: '/admin/cache/metrics',
            /** 分页列出缓存键 */
            KEYS: '/admin/cache/keys',
            /** 删除指定缓存键 */
            DELETE_ENTRY: (key: string) => `/admin/cache/entries/${encodeURIComponent(key)}`,
            /** 根据模式批量删除缓存 */
            DELETE_BY_PATTERN: '/admin/cache/entries',
            /** 清空所有缓存 */
            EVICT_ALL: '/admin/cache/evict-all'
        },
        // 系统设置
        SETTING: {
            /** 获取配置 */
            QUERY: (name: string) => `/admin/setting/query/${name}`,
            /** 更新配置 */
            UPDATE: (name: string) => `/admin/setting/update/${name}`
        },
        // 文章分类关联
        POST_CATEGORY: {
            /** 获取文章的分类 */
            QUERY: (postId: number) => `/admin/postCategory/query/${postId}`,
            /** 新增文章分类关联 */
            ADD: '/admin/postCategory/add',
            /** 删除文章分类关联 */
            DELETE: (postId: number, categoryId: number) => `/admin/postCategory/delete/${postId}/${categoryId}`
        }
    },

    // ========== 客户端模块 (blog_client: 端口5031) ==========
    CLIENT: {
        // 文章展示
        POST: {
            /** 分页查询文章 */
            QUERY_ALL: '/client/post/queryAll',
            /** 获取文章详情 */
            QUERY_BY_ID: (id: number) => `/client/post/query/${id}`,
            /** 根据分类分页查询文章 */
            QUERY_BY_CATEGORY: '/client/post/queryPostByCategory',
            /** 根据标签分页查询文章 */
            QUERY_BY_TAG: '/client/post/queryPostByTag',
            /** 时间线分页查询文章 */
            TIMELINE: '/client/post/timeline',
            /** 更新文章数据 */
            UPDATE_DATA: '/client/post/updatePostData'
        },
        // 分类展示
        CATEGORY: {
            /** 获取全部顶级分类 */
            QUERY_PRIMARY: '/client/category/queryPrimaryCategory',
            /** 获取指定分类的下级分类 */
            QUERY_BY_PRIMARY: '/client/category/queryCategoryByPrimary',
            /** 获取所有父类分类及其子分类 */
            QUERY_ALL: '/client/category/queryAllCategory'
        },
        // 标签展示
        TAG: {
            /** 分页查询标签 */
            QUERY_ALL: '/client/tag/queryAll',
            /** 获取热门标签 */
            QUERY_HOT: '/client/tag/queryHotTag'
        },
        // 评论客户端
        COMMENT: {
            /** 分页查询评论 */
            QUERY_ALL: '/client/comment/queryAll',
            /** 新增评论 */
            ADD: '/client/comment/add'
        },
        // 友链客户端
        FRIEND_LINK: {
            /** 分页查询友链 */
            QUERY_ALL: '/client/friendLink/queryAll',
            /** 申请友链 */
            ADD: '/client/friendLink/add'
        }
    },

    // ========== 认证模块 (blog_auth: 端口5001) ==========
    AUTH: {
        // 普通用户
        USER: {
            /** 注册用户 */
            REGISTER: '/user/register',
            /** 用户登录 */
            LOGIN: '/user/doLogin',
            /** 用户登出 */
            LOGOUT: '/user/logout',
            /** 查询登录状态 */
            IS_LOGIN: '/user/isLogin',
            /** 获取用户信息 */
            GET_INFO: '/user/getUserInfo',
            /** 更新用户信息 */
            UPDATE: '/user/update',
            /** 删除用户 */
            DELETE: '/user/delete',
            /** 启用/禁用用户 */
            CHANGE_STATUS: '/user/changeStatus'
        },
        // 管理员用户
        ADMIN_USER: {
            /** 注册管理员 */
            REGISTER: '/adminUser/register',
            /** 管理员登录 */
            LOGIN: '/adminUser/doLogin',
            /** 管理员登出 */
            LOGOUT: '/adminUser/logout',
            /** 查询登录状态 */
            IS_LOGIN: '/adminUser/isLogin',
            /** 获取管理员信息 */
            GET_INFO: '/adminUser/getUserInfo',
            /** 更新管理员信息 */
            UPDATE: '/adminUser/update',
            /** 删除管理员 */
            DELETE: '/adminUser/delete',
            /** 启用/禁用管理员 */
            CHANGE_STATUS: '/adminUser/changeStatus'
        }
    },

    // ========== 兼容旧代码的路径 (逐步废弃) ==========
    // 文章相关(旧)
    ARTICLE: {
        /** 文章列表 */
        LIST: '/api/articles',
        /** 文章详情 */
        DETAIL: (id: string) => `/api/articles/${id}`,
        /** 创建文章 */
        CREATE: '/api/articles',
        /** 更新文章 */
        UPDATE: (id: string) => `/api/articles/${id}`,
        /** 删除文章 */
        DELETE: (id: string) => `/api/articles/${id}`,
        /** 文章点赞 */
        LIKE: (id: string) => `/api/articles/${id}/like`,
        /** 文章收藏 */
        BOOKMARK: (id: string) => `/api/articles/${id}/bookmark`,
        /** 增加浏览量 */
        VIEW: (id: string) => `/api/articles/${id}/view`,
        /** 文章评论 */
        COMMENTS: (id: string) => `/api/articles/${id}/comments`
    },

    // 管理员文章相关
    ADMIN_ARTICLE: {
        /** 获取文章列表 */
        LIST: '/api/admin/articles',
        /** 获取文章详情 */
        DETAIL: (id: string) => `/api/admin/articles/${id}`,
        /** 创建文章 */
        CREATE: '/api/admin/articles',
        /** 更新文章 */
        UPDATE: (id: string) => `/api/admin/articles/${id}`,
        /** 删除文章 */
        DELETE: (id: string) => `/api/admin/articles/${id}`,
        /** 保存草稿 */
        SAVE_DRAFT: '/api/admin/articles/draft',
        /** 发布文章 */
        PUBLISH: (id: string) => `/api/admin/articles/${id}/publish`,
        /** 批量删除文章 */
        BATCH_DELETE: '/api/admin/articles/batch/delete',
        /** 批量发布文章 */
        BATCH_PUBLISH: '/api/admin/articles/batch/publish',
        /** 获取文章统计 */
        STATS: '/api/admin/articles/stats',
        /** 上传文章图片 */
        UPLOAD_IMAGE: '/api/admin/articles/upload/image',
        /** 获取文章分类 */
        CATEGORIES: '/api/admin/articles/categories',
        /** 获取文章标签 */
        TAGS: '/api/admin/articles/tags',
        /** 切换文章置顶状态 */
        TOGGLE_TOP: (id: string) => `/api/admin/articles/${id}/toggle-top`,
        /** 切换文章推荐状态 */
        TOGGLE_RECOMMEND: (id: string) => `/api/admin/articles/${id}/toggle-recommend`,
        /** 搜索文章 */
        SEARCH: '/api/admin/articles/search'
    },

    // 分类相关
    CATEGORY: {
        /** 分类列表 */
        LIST: '/api/categories',
        /** 分类详情 */
        DETAIL: (id: string) => `/api/categories/${id}`,
        /** 创建分类 */
        CREATE: '/api/categories',
        /** 更新分类 */
        UPDATE: (id: string) => `/api/categories/${id}`,
        /** 删除分类 */
        DELETE: (id: string) => `/api/categories/${id}`,
        /** 分类下的文章 */
        ARTICLES: (id: string) => `/api/categories/${id}/articles`,
        /** 移动分类位置 */
        MOVE: (id: string) => `/api/categories/${id}/move`,
        /** 获取分类树形结构 */
        TREE: '/api/categories/tree',
        /** 获取分类统计 */
        STATS: '/api/categories/stats',
        /** 搜索分类 */
        SEARCH: '/api/categories/search'
    },

    // 评论管理相关
    COMMENT: {
        /** 评论列表 */
        LIST: '/api/admin/comments',
        /** 评论详情 */
        DETAIL: (id: string) => `/api/admin/comments/${id}`,
        /** 通过评论 */
        APPROVE: (id: string) => `/api/admin/comments/${id}/approve`,
        /** 拒绝评论 */
        REJECT: (id: string) => `/api/admin/comments/${id}/reject`,
        /** 删除评论 */
        DELETE: (id: string) => `/api/admin/comments/${id}`,
        /** 回复评论 */
        REPLY: (id: string) => `/api/admin/comments/${id}/reply`,
        /** 批量通过评论 */
        BATCH_APPROVE: '/api/admin/comments/batch/approve',
        /** 批量拒绝评论 */
        BATCH_REJECT: '/api/admin/comments/batch/reject',
        /** 批量删除评论 */
        BATCH_DELETE: '/api/admin/comments/batch/delete',
        /** 获取评论统计 */
        STATS: '/api/admin/comments/stats',
        /** 获取文章列表（用于筛选） */
        POSTS: '/api/admin/comments/posts'
    },

    // 标签相关
    TAG: {
        /** 标签列表 */
        LIST: '/api/tags',
        /** 标签详情 */
        DETAIL: (id: string) => `/api/tags/${id}`,
        /** 创建标签 */
        CREATE: '/api/tags',
        /** 更新标签 */
        UPDATE: (id: string) => `/api/tags/${id}`,
        /** 删除标签 */
        DELETE: (id: string) => `/api/tags/${id}`,
        /** 标签下的文章 */
        ARTICLES: (id: string) => `/api/tags/${id}/articles`
    },

    // 管理员标签相关
    ADMIN_TAG: {
        /** 获取标签列表 */
        LIST: '/api/admin/tags',
        /** 标签详情 */
        DETAIL: (id: string) => `/api/admin/tags/${id}`,
        /** 创建标签 */
        CREATE: '/api/admin/tags',
        /** 更新标签 */
        UPDATE: (id: string) => `/api/admin/tags/${id}`,
        /** 删除标签 */
        DELETE: (id: string) => `/api/admin/tags/${id}`,
        /** 批量删除标签 */
        BATCH_DELETE: '/api/admin/tags/batch/delete',
        /** 获取标签统计 */
        STATS: '/api/admin/tags/stats',
        /** 搜索标签 */
        SEARCH: '/api/admin/tags/search'
    },

    // 文件上传
    UPLOAD: {
        /** 图片上传 */
        IMAGE: '/api/upload/image',
        /** 文件上传 */
        FILE: '/api/upload/file',
        /** 批量上传 */
        BATCH: '/api/upload/batch'
    },

    // 搜索相关
    SEARCH: {
        /** 全局搜索 */
        GLOBAL: '/api/search',
        /** 文章搜索 */
        ARTICLES: '/api/search/articles',
        /** 用户搜索 */
        USERS: '/api/search/users'
    },

    // 统计相关
    STATS: {
        /** 网站统计 */
        SITE: '/api/stats/site',
        /** 用户统计 */
        USER: '/api/stats/user',
        /** 文章统计 */
        ARTICLE: '/api/stats/article'
    },

    // 联系相关
    CONTACT: {
        /** 发送联系消息 */
        SEND_MESSAGE: '/api/contact/send'
    },

    // 友链相关
    FRIENDS: {
        /** 获取友链列表 */
        LIST: '/api/friends',
        /** 提交友链申请 */
        APPLY: '/api/friends/apply',
        /** 获取友链分类 */
        CATEGORIES: '/api/friends/categories',
        /** 获取友链标签 */
        TAGS: '/api/friends/tags'
    },

    // 管理后台友链相关
    ADMIN_FRIENDS: {
        /** 获取友链列表 */
        LIST: '/api/admin/friends',
        /** 友链详情 */
        DETAIL: (id: string) => `/api/admin/friends/${id}`,
        /** 创建友链 */
        CREATE: '/api/admin/friends',
        /** 更新友链 */
        UPDATE: (id: string) => `/api/admin/friends/${id}`,
        /** 删除友链 */
        DELETE: (id: string) => `/api/admin/friends/${id}`,
        /** 批量删除友链 */
        BATCH_DELETE: '/api/admin/friends/batch/delete',
        /** 更新友链状态 */
        UPDATE_STATUS: (id: string) => `/api/admin/friends/${id}/status`,
        /** 获取友链统计 */
        STATS: '/api/admin/friends/stats',
        /** 获取友链分类 */
        CATEGORIES: '/api/admin/friends/categories',
        /** 获取友链申请列表 */
        APPLICATIONS: '/api/admin/friends/applications',
        /** 获取友链申请详情 */
        APPLICATION_DETAIL: (id: string) => `/api/admin/friends/applications/${id}`,
        /** 审核友链申请 */
        REVIEW_APPLICATION: (id: string) => `/api/admin/friends/applications/${id}/review`,
        /** 获取友链申请统计 */
        APPLICATION_STATS: '/api/admin/friends/applications/stats'
    },

    // 留言板相关
    GUESTBOOK: {
        /** 获取留言列表 */
        LIST: '/api/guestbook',
        /** 提交留言 */
        SUBMIT: '/api/guestbook',
        /** 回复留言 */
        REPLY: (id: string) => `/api/guestbook/${id}/reply`,
        /** 点赞留言 */
        LIKE: (id: string) => `/api/guestbook/${id}/like`,
        /** 获取留言统计 */
        STATS: '/api/guestbook/stats'
    },

    // 订阅相关
    SUBSCRIBE: {
        /** 邮件订阅 */
        EMAIL: '/api/subscribe/email',
        /** 获取订阅统计 */
        STATS: '/api/subscribe/stats'
    },

    // 时间线相关
    TIMELINE: {
        /** 获取时间线列表 */
        LIST: '/api/timeline'
    },

    // 缓存管理相关
    CACHE: {
        /** 获取缓存统计 */
        STATS: '/api/cache/stats',
        /** 获取缓存配置 */
        CONFIG: '/api/cache/config',
        /** 保存缓存配置 */
        SAVE_CONFIG: '/api/cache/config',
        /** 清除HTTP缓存 */
        CLEAR_HTTP: '/api/cache/clear/http',
        /** 清除所有缓存 */
        CLEAR_ALL: '/api/cache/clear/all',
        /** 删除指定缓存 */
        DELETE: (key: string) => `/api/cache/delete/${key}`,
        /** 刷新缓存统计 */
        REFRESH: '/api/cache/refresh',
        /** 获取缓存日志 */
        LOGS: '/api/cache/logs'
    },

    // 仪表板相关
    DASHBOARD: {
        /** 获取仪表板统计数据 */
        STATS: '/api/admin/dashboard/stats',
        /** 获取最近文章列表 */
        RECENT_POSTS: '/api/admin/dashboard/recent-posts',
        /** 获取系统概览 */
        OVERVIEW: '/api/admin/dashboard/overview',
        /** 获取访问统计 */
        VISITS: '/api/admin/dashboard/visits',
        /** 获取评论统计 */
        COMMENTS: '/api/admin/dashboard/comments',
        /** 获取用户活跃度 */
        ACTIVITY: '/api/admin/dashboard/activity'
    },

    // 系统设置相关
    SYSTEM_SETTINGS: {
        /** 获取系统设置 */
        GET: '/api/admin/system/settings',
        /** 更新系统设置 */
        UPDATE: '/api/admin/system/settings',
        /** 获取网站信息 */
        SITE_INFO: '/api/admin/system/site-info',
        /** 更新网站信息 */
        UPDATE_SITE_INFO: '/api/admin/system/site-info',
        /** 获取邮件配置 */
        EMAIL_CONFIG: '/api/admin/system/email-config',
        /** 更新邮件配置 */
        UPDATE_EMAIL_CONFIG: '/api/admin/system/email-config',
        /** 测试邮件配置 */
        TEST_EMAIL: '/api/admin/system/test-email',
        /** 获取备份配置 */
        BACKUP_CONFIG: '/api/admin/system/backup-config',
        /** 更新备份配置 */
        UPDATE_BACKUP_CONFIG: '/api/admin/system/backup-config',
        /** 执行备份 */
        BACKUP: '/api/admin/system/backup',
        /** 获取系统日志 */
        LOGS: '/api/admin/system/logs',
        /** 清除系统日志 */
        CLEAR_LOGS: '/api/admin/system/clear-logs',
        /** 获取系统状态 */
        STATUS: '/api/admin/system/status',
        /** 重启系统 */
        RESTART: '/api/admin/system/restart'
    }
} as const

// HTTP方法
export const HTTP_METHODS = {
    GET: 'GET',
    POST: 'POST',
    PUT: 'PUT',
    DELETE: 'DELETE',
    PATCH: 'PATCH'
} as const

// 请求头配置
export const HEADERS = {
    /** 内容类型 */
    CONTENT_TYPE: {
        JSON: 'application/json',
        FORM_DATA: 'multipart/form-data',
        TEXT: 'text/plain'
    },
    /** 授权头 */
    AUTHORIZATION: 'Authorization',
    /** 接受类型 */
    ACCEPT: 'Accept',
    /** 用户代理 */
    USER_AGENT: 'User-Agent'
} as const

// 响应状态码
export const STATUS_CODES = {
    /** 成功 */
    OK: 200,
    /** 创建成功 */
    CREATED: 201,
    /** 无内容 */
    NO_CONTENT: 204,
    /** 错误请求 */
    BAD_REQUEST: 400,
    /** 未授权 */
    UNAUTHORIZED: 401,
    /** 禁止访问 */
    FORBIDDEN: 403,
    /** 未找到 */
    NOT_FOUND: 404,
    /** 冲突 */
    CONFLICT: 409,
    /** 服务器错误 */
    INTERNAL_SERVER_ERROR: 500
} as const

/**
 * 获取完整的API URL
 * @param path API路径
 * @returns 完整的API URL
 * @description 根据路径前缀自动判断使用哪个端口
 */
export const getApiUrl = (path: string): string => {
    const baseUrl = API_CONFIG.BASE_URL

    // 如果路径已经包含完整URL，直接返回
    if (path.startsWith('http://') || path.startsWith('https://')) {
        return path
    }

    // 根据路径前缀判断使用哪个端口
    if (path.startsWith('/admin/')) {
        // 管理后台模块: blog_admin (端口5021)
        return `${baseUrl}:${API_CONFIG.ADMIN_PORT}${path}`
    } else if (path.startsWith('/client/')) {
        // 客户端模块: blog_client (端口5031)
        return `${baseUrl}:${API_CONFIG.CLIENT_PORT}${path}`
    } else if (path.startsWith('/user/') || path.startsWith('/adminUser/')) {
        // 认证模块: blog_auth (端口5001)
        return `${baseUrl}:${API_CONFIG.AUTH_PORT}${path}`
    }

    // 兼容旧的/api路径
    if (path.startsWith('/api')) {
        return `${baseUrl}${path}`
    }

    // 默认返回基础URL + 路径
    return `${baseUrl}${path}`
}

// 获取API配置
export const getApiConfig = () => {
    return {
        baseURL: API_CONFIG.BASE_URL,
        timeout: API_CONFIG.TIMEOUT,
        headers: {
            'Content-Type': HEADERS.CONTENT_TYPE.JSON,
            'Accept': HEADERS.CONTENT_TYPE.JSON
        }
    }
}

// 环境检查
export const isDevelopment = () => import.meta.env.DEV
export const isProduction = () => import.meta.env.PROD
export const isTest = () => import.meta.env.MODE === 'test'
